//
//  UploadImageViewController.swift
//  StealPicture
//
//  Created by ?! 郭斌勇 on 16/8/11.
//  Copyright © 2016年 ?! 郭斌勇. All rights reserved.
//

import UIKit

let Key_图片协议已同意 = "Key_图片协议已同意"
let SegueId_图片协议_同意 = "图片协议_同意"
let SegueId_图片协议_不同意 = "图片协议_不同意"

let 重用标识符_已删除 = "cell:已删除"

class UploadImageViewController: UITableViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

    
    
    
    //MARK:成员变量
    
    @IBOutlet var uploadImageFooterView: UIView!
    
    
    var 需要关闭_实例 = false
    
    var 图片信息_数组 = [图片信息_CL]()
    
    @IBOutlet var 导航视图: UIView!
    
    var 图片来源选择alert:UIAlertController?{
        didSet{
            
            
            if 图片来源选择alert != nil {
                if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary){
                    let alertAction = UIAlertAction(title: "图库", style: .Default, handler: {(action:UIAlertAction)->Void in
                        self.图片选择picker.sourceType = .PhotoLibrary
                        self.图片选择picker.allowsEditing = true
                        self.presentViewController(self.图片选择picker, animated: true, completion: nil)
                        
                    })
                    图片来源选择alert?.addAction(alertAction)
                    
                }
                
                if UIImagePickerController.isSourceTypeAvailable(.SavedPhotosAlbum){
                    let alertAction = UIAlertAction(title: "相册", style: .Default, handler: {(action:UIAlertAction)->Void in
                        
                        self.图片选择picker.sourceType = .SavedPhotosAlbum
                        self.图片选择picker.allowsEditing = false
                        self.presentViewController(self.图片选择picker, animated: true, completion: nil)
                        
                    })
                    图片来源选择alert?.addAction(alertAction)
                }
                
                
                if UIImagePickerController.isSourceTypeAvailable(.Camera){
                    let alertAction = UIAlertAction(title: "照相机", style: .Default, handler: {(action:UIAlertAction)->Void in
                        
                        self.图片选择picker.sourceType = .Camera
                        self.图片选择picker.allowsEditing = false
                        self.presentViewController(self.图片选择picker, animated: true, completion: nil)
                        
                    })
                    图片来源选择alert?.addAction(alertAction)
                    
                }
                
                let 取消action = UIAlertAction(title: "取消", style: .Cancel, handler: nil)
                图片来源选择alert?.addAction(取消action)
            } //if 图片来源
            
        }//didSet
        
    }
    
    lazy var 图片选择picker = UIImagePickerController()

    
    
    
    //MARK:视图加载函数
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
       
        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    
        var 新图片信息_实例 = 图片信息_CL()
        新图片信息_实例.同步到全局量 = false
        新图片信息_实例.原图 = UIImage(named: "上击添加图片")
        新图片信息_实例.描述 = ""
        新图片信息_实例.内容类别?.名称 = "请选择类别"
        图片信息_数组.append(新图片信息_实例)
       
    }
    


    override func viewWillAppear(animated: Bool) {
        图片协议显示决断_函数()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
        
      
    }

    // MARK: - Table view data source


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 图片信息_数组.count
    }

    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
//        let 重用标识符 = "Cell:\(indexPath.section):\(indexPath.row)"
//        
//        var cell = tableView.dequeueReusableCellWithIdentifier(重用标识符) as? UploadImageTableViewCell
//        
//        if cell == nil {
//            
//            cell = tableView.dequeueReusableCellWithIdentifier("UploadImageTableViewCell", forIndexPath: indexPath) as? UploadImageTableViewCell
//            
//            
//            // Configure the cell...
//            cell!.setValue(重用标识符, forKey: "reuseIdentifier")
//            cell!.行号 = indexPath.row + 100
//            
//            let 临时图片信息 = 图片信息_数组[indexPath.row]
//            cell!.图片信息 = 临时图片信息
//            
//            
//            
//        }
//        
        
        
        let cell = tableView.dequeueReusableCellWithIdentifier("UploadImageTableViewCell", forIndexPath: indexPath) as? UploadImageTableViewCell
        cell!.行号 = indexPath.row + 100
        cell?.需要初始化 = true
        var 临时图片信息 = 图片信息_数组[indexPath.row]
        //代理必须放在图片信息后面设置,否则会形成循环调用
        cell!.图片信息 = 临时图片信息
        cell?.代理 = self
        
        return cell!
    }
    

    
    override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return 导航视图
    }
    
    override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView?{
        
        return uploadImageFooterView
    }
    
    
//    override func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath){
//        
//        let 图片信息cell = cell as! UploadImageTableViewCell
//        图片信息_数组[indexPath.row] = 图片信息cell.图片信息!
//        
//    }
    
    
    
    //MARK:图片协议显示决断
    
    func 图片协议显示决断_函数(){
        if (!(NSUserDefaults.standardUserDefaults().boolForKey(Key_图片协议已同意)))  && (需要关闭_实例 == false) {
            self.performSegueWithIdentifier("图片协议segue", sender: self)
        }
        
    }
    
    
    
    //MARK:触摸事件
    
    @IBAction func 添加图片按钮事件函数(sender: UIButton) {
        var 新图片信息_实例 = 图片信息_CL()
        新图片信息_实例.同步到全局量 = false
        新图片信息_实例.原图 = UIImage(named: "点击添加图片")
        新图片信息_实例.描述 = ""
        新图片信息_实例.内容类别?.名称 = "请选择类别"
        图片信息_数组.append(新图片信息_实例)
        tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 图片信息_数组.count - 1, inSection: 0)], withRowAnimation: UITableViewRowAnimation.Automatic)
    }
    
    

    @IBAction func 上传图片按钮事件函数(sender: UIButton) {
        
        var 上传完成列表 = [NSIndexPath]()
        
        for 序号 in 0 ..< 图片信息_数组.count {
            let indexPath = NSIndexPath(forRow: 序号, inSection: 0)
            let cell = tableView.cellForRowAtIndexPath(indexPath) as! UploadImageTableViewCell
            if cell.上传图片信息() != nil {
                上传完成列表.append(indexPath)
            }
            
        }//for
        
        
        for 上传完成indexPatch in 上传完成列表 {
            图片信息_数组.removeAtIndex(上传完成indexPatch.row)
            tableView.deleteRowsAtIndexPaths([上传完成indexPatch], withRowAnimation: UITableViewRowAnimation.Automatic)
        }

        if 图片信息_数组.count == 0 {
            self.performSegueWithIdentifier("UploadImageViewController_取消_返回", sender: sender)
        }
        
        
    }
    
    
    

    //这是cell上的按钮点击事件,通过sender.tag信息传达其所在的row,为避免冲突,tag从100开始
    @IBAction func 删除按钮事件函数(sender: UIButton) {
        let 删除行 = NSIndexPath(forRow: sender.tag - 100, inSection: 0)
        
        图片信息_数组.removeAtIndex(删除行.row)
        tableView.deleteRowsAtIndexPaths([删除行], withRowAnimation: UITableViewRowAnimation.Automatic)

    }
    

    
    
    @IBAction func 图片button点击_函数(sender: UIButton) {
        
        let 活跃rowIndex = sender.tag - 100
        let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 活跃rowIndex, inSection: 0)) as! UploadImageTableViewCell
        图片选择picker.delegate = cell
        if 图片来源选择alert == nil {
            图片来源选择alert = UIAlertController(title: "图片来源", message: nil, preferredStyle: .ActionSheet)
        } //if 图片来源
        
        
        self.presentViewController(图片来源选择alert!, animated: true, completion: nil)
        
        
    }

    
    
    
    
    
    //MARK:转场事件
    @IBAction func unwindSegueToUploadImageViewControllerFrom(segue:UIStoryboardSegue){
        
        if let segueId = segue.identifier{
            
            
            switch segueId {
            case SegueId_图片协议_同意:
                NSUserDefaults.standardUserDefaults().setBool(true, forKey: Key_图片协议已同意)
            case SegueId_图片协议_不同意:
                需要关闭_实例 = true
                self.performSegueWithIdentifier("UploadImageViewController返回", sender: self)
            default: break
                
            }
            
            
        }
        
        
     
    }
    
    
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        
        
        
        if let segueID = segue.identifier{
            
            switch segueID{
            case "LabelViewController_呈现":
                let 标签vc = segue.destinationViewController as! LabelViewController
                let 被挂载视图 = sender as! UIView
                let 活跃rowIndex = 被挂载视图.tag - 100
                let  cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 活跃rowIndex, inSection: 0)) as? UploadImageTableViewCell
                标签vc.触发cell = cell
                标签vc.keyWindoew挂载矩形 = 被挂载视图.convertRect(被挂载视图.bounds, toView: UIApplication.sharedApplication().keyWindow)
                
            default:break
            }//switch
            
        }//if
        
        
    

    }//prepareForSegue
    
    
    
    
    

}
